#!/bin/bash

# 命令替换语法
# * variable 是变量名，commands 是要执行的命令。commands 可以只有一个命令，也可以有多个命令，多个命令之间以分号;分隔。
variable=`commands`

# 命令替换是指将命令的输出结果赋值给某个变量。
# *有两种方式可以完成命令替换：一种是反引号``，一种是$()。
get_time1=`date`                       #开始时间，使用``替换
get_time2=$(date)                      #开始时间，使用``替换
echo "获取 get_time1 时间: $get_time1 "
echo "获取 get_time2 时间: $get_time2 "

# 使用%s格式控制符可以得到当前的UNIX时间戳。UNIX 时间戳是指从 1970 年 1 月 1 日 00:00:00 到目前为止的秒数。
# * (())是 Shell 的数学计算命令（整数运算）。
get_unxi_begin_time=`date + %s`                              #开始时间
sleep 3s                                                     #休眠 3 秒
get_unxi_finish_time=$(date + %s)                            #结束时间
get_run_time=$((get_unxi_finish_time - get_unxi_begin_time)) #运行时间
echo "结束时间和开始时间差是： ${get_run_time} 秒"

# 如果被替换的命令的输出内容包括多行（有换行符），
# 或者含有多个连续的空白符，那么在输出变量时应该将变量用双引号包围，
# 否则系统会使用默认的空白符来填充，这会导致换行无效，以及连续的空白符被压缩成一个。
LSL=`ls -l`
echo $LSL                     #不使用双引号包围【没有使用双引号把变量包围导致输出数据被压缩成一行】
echo "----------------------" #输出分隔符【仅用作隔离作用】
echo "$LSL"                   #使用引号包围【使用双引号把变量包围，文件能够自动换行（很好看）】

# 区分反引号和$()的用法区别。
# *两种变量替换的形式是等价的，可以随意使用；
# *反引号看起来像单引号，有时候会对查看代码造成困扰；
# * $() 相对清晰，能有效避免；
# *有些情况必须使用 $() ： $() 支持嵌套，反引号不行；
# * $() 仅在 Bash Shell 中有效，而反引号可在多种 Shell 中使用。
